07 Django 视图 Views
一、HttpRequest 和 HttpRespone
Django 中的视图主要用来接收 web 请求,并做出响应,视图本质就是一个 Python 中的函数。
视图响应分为两大类
- 以
Json数据形式返回(JsonResponse) - 以网页形式返回
- 重定向到另一个网页(
HttpResponseRedirect) - 错误视图(
4XX,5XX)(HttpResponseNotFound、HttpResponseForbidden、HttpResponsenNotAllowed等)
- 重定向到另一个网页(
视图的响应过程
浏览器输入 url -> urls 路由匹配 -> 视图响应 -> 回馈到浏览器
视图参数:
- 一个
HttpRequset的实例,一般名为Request。如:def book_list(request) - 通过
url正则表达式传递过来的参数。如:def book_detail(request, bid)中的bid
位置:
通常在应用下的 views.py 中定义
错误视图:
- 404视图(页面没有找到)
- 400视图(客户操作错误)
- 500视图(服务器内部错误)
1. HttpRequest 详细介绍
服务器在接收到 Http 请求后,会根据报文创建 HttpRequest 对象。视图中的第一个参数就是 HttpRequest 对象。Django 框架接收到 Http 请求后会将 Http 请求包装为 HttpRequest 对象,之后转递给视图。
request常用属性和方法
属性
| 属性名称 | 功能 |
|---|---|
path |
请求和完整路径 |
method |
请求的方法,常用 GET、POST |
GET |
类似字典的参数,包含了 get 的所有参数 |
POST |
类似字典的参数,包含了 post 的所有参数 |
FILES |
类似字典的参数,包含了上传的文件 |
COOKIES |
字典,包含了所有 COOKIES |
session |
类似字典,表示会话 |
方法
| 方法名称 | 功能 |
|---|---|
is_ajax() |
判断是否是 ajax(),通常用在移动端和 JS 中 |
get_full_path() |
返回包含参数字符串的请求路径 |
QueryDict: 类字典的对象
类似字典的数据结构,与字典的区别是类字典可以存在想同的键
QueryDict 的方法
| 方法名称 | 功能 |
|---|---|
dict.get('uname') 或 dict['uname'] |
取出 uname 键对应的 value 值 |
dict.getlist('uname') |
获取 uname 键对应的所有 value 值 |
2. HttpResponse 详细介绍
服务器返回给客户端的数据。
HttpResponse 由程序员自己创建
- 不使用模板,直接调用
HttpResponse(),返回HttpResponse对象 - 调用模板,使用
render进行渲染,render(request, template_name[, context])request:请求对象template_name:使用的模板context:字典参数,用来填坑
属性
| 属性名称 | 内容 |
|---|---|
content |
返回的内容 |
charset |
编码格式 |
status_code |
响应状态码(2xx,3xx,4xx,5xx) |
方法
| 方法名称 | 功能 |
|---|---|
write(xxx) |
直接写出文本 |
flush() |
冲刷缓冲区 |
set_cookie(key, value="xxx", max_age=None |
设置 cookie |
delete_cookie(key) |
删除 cookie |
HttpResponse 子类
HttpResponseRedirect
响应重定向,可以实现服务内部跳转,
如:return HttpResponseRedirect("/book_detail/bid/")
实际使用时推荐使用反向解析。
JsonResponse
返回 Json 数据的请求,通常用在异步请求上。
JsonResponse(dict),返回 Json 数据时,content-type 是 application/json